#!/usr/bin/env python3

# Local）：最内层，包含局部变量，比如一个函数/方法内部。
# E（Enclosing）：包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数，一个函数（或类） A 里面又包含了一个函数 B ，那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
# G（Global）：当前脚本的最外层，比如当前模块的全局变量。
# B（Built-in）： 包含了内建的变量/关键字等，最后被搜索。





total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
    #返回2个参数的和."
    total = arg1 + arg2 # total在这里是局部变量.
    print ("total函数内是局部变量 : ", total)
    return total
 
#调用sum函数
sum( 10, 20 )
print ("total函数外是全局变量 : ", total)
print("------------------------")

# 修改全局作用域的变量
num = 1

def fun1():
    global num  # 需要使用 global 关键字声明
    print(num)
    num = 123
    print(num)

fun1()
print(num)
print("------------------------")


# 修改嵌套作用域的变量
def outer():
    num = 10

    def inner():             # 函数中可以定义函数
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)

outer()
